package com.huyi.thread;

import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Random;
import java.util.Set;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * 线程等待 - Wait 释放锁
 * 线程通知 - notify  不释放锁
 * Wait和notify必须配合synchronized使用，但是notify不释放锁，所以t1程序中只有等t2执行完才能得到锁，即不是实时的
 * 
 * @author shengli.hu
 *
 */
public class QQDemo {

	public static void main(String[] args) throws InterruptedException {

		// 并发通知器
		CountDownLatch countDown = new CountDownLatch(1);
		
		Random random=new Random();
		Set<String> set = new HashSet<String>();
		new Thread(new Runnable() {
			@Override
			public void run() {
				while(set.size() < 100000000) {
					//随机生成数字，并添加到字符串
					StringBuilder str=new StringBuilder();
					for(int i=0;i<8;i++){
					    str.append(random.nextInt(10));
					}
					set.add(str.toString());
				}
				// 执行完通知主程序打印结果
				countDown.countDown();
				System.out.println("通知释放。。。");
			}
		}, "t1").start();
		
		// 阻塞等待
		System.out.println("开始等待。。。");
		countDown.await();
		System.out.println("得到通知。。。set:" + set.size());
		// System.out.println(Arrays.toString(set.toArray()));
	}
}


